package devcken.net.socket;

import java.util.HashMap;
import java.util.Map;

public enum HeaderParseResult
{
	/**
	 * Parsing이 성공됐을 때를 나타낸다.
	 */
	Success(0x00),
	
	/**
	 * Null이거나 올바르지 않은 헤더 후보자가 전달된 경우를 나타낸다.
	 */
	InvalidHeaderCandidate(0x01),
	
	/**
	 * 헤더 후보자에 패킷 시작 구분자가 존재하지 않는 경우를 나타낸다.
	 */
	NoSeparator(0x02),
	
	/**
	 * Parsing된 헤더 내의 헤더 크기 값과 실제 헤더 크기가 다른 경우를 나타낸다.
	 */
	HeaderSizeNotMatch(0x04),
	
	/**
	 * 올바르지 않은 패킷 유형이 전달된 경우를 나타낸다.
	 */
	InvalidPacketType(0x08),
	
	/**
	 * 올바르지 않은 암호화 옵션이 전달된 경우를 나타낸다.
	 */
	InvalidEncryptionOptions(0x16);
	
	public final byte value;
	
	public final static int Size = Byte.SIZE;
	
	private static final Map<Byte, HeaderParseResult> _map = new HashMap<Byte, HeaderParseResult>();
	
	static
	{
		for (HeaderParseResult item : HeaderParseResult.values())
		{
			_map.put(item.value, item);
		}
	}
	
	private HeaderParseResult(int value)
	{
		this.value = (byte)value;
	}

	public byte value()
	{
		return this.value;
	}
	
	public static HeaderParseResult convert(byte value)
	{
		return _map.get(value);
	}
}